package io.red;

import io.Procesador;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

/**
 *
 * @author Mariano Zapata
 */
public class GestorConexiones extends Thread {
    
    private ServerSocket servidorObjeto;
    private ServerSocket servidorArchivo;
    private Socket conexionArchivo;
    private Procesador procesador;
    private boolean vida;
    
    public GestorConexiones(int puertoObjeto, int puertoArchivo, Procesador procesador) throws IOException
    {
        super("GestorConexiones");
        this.procesador= procesador;
        servidorObjeto= new ServerSocket(puertoObjeto);
        servidorArchivo= new ServerSocket(puertoArchivo);
        vida= true;
        conexionArchivo= null;
    }
    
    @Override
    @SuppressWarnings("SleepWhileInLoop")
    public void run()
    {
        EscuchaConexionArchivo eca= new EscuchaConexionArchivo(this, servidorArchivo);
        eca.start();
        while (vida)
        {
            try {
                conexionArchivo= null;
                Socket conexionObjeto= servidorObjeto.accept();
                Thread.sleep(2000);
                if (conexionArchivo != null)
                {
                    Conexion x= new Conexion(conexionObjeto, conexionArchivo);
                    procesador.agregarConexion(x);
                }
            } catch (IOException ex) {vida= false;
                                      if (!(ex instanceof SocketException))
                                          procesador.errorDeRed(ex.getMessage());}
              catch (InterruptedException ex) {/*NADA*/}
        }
    }
    
    public void detener()
    {
        try {
            servidorObjeto.close();
            servidorArchivo.close();
        } catch (IOException ex) {/*NADA*/}
    }
    
    public void setConexionArchivo(Socket conexionArchivo) {this.conexionArchivo= conexionArchivo;}
    
    public void errorEscuchaConexionArchivo(String mensaje) {procesador.errorDeRed(mensaje);}
    
    public String obtenerIP()
    {
        try {
            return InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException ex) {/*NO DEBE PASAR.*/ return "EXCEPCIÓN.";}
    }
}
